package org.jeecg.modules.compilation.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.math.RandomUtils;
import org.jeecg.common.constant.CommonConstant;

import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.util.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Slf4j
@Component
public class CommonUtil {



    //0-未启用
    public static final String STATUS_ERROR = "0";
    //1-启用
    public static final String STATUS_OK = "1";

   public static String GenerateRandomNumbers (){
       return new Random().nextInt(900) + 100 + "";
   }


    /**
     * 生成编号
     *
     * */
    public static String  getSn(){
        String prefix = "CI";
        //订单前缀默认为CI 如果规则参数不为空，则取自定义前缀
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        int random = RandomUtils.nextInt(90) + 10;
        return  prefix + format.format(new Date()) + random;
    }


    public static int getNumberLength(String str) {
        // 去除字符串两端的空格
        str = str.trim();
        // 判断字符串是否以负号开头
        boolean isNegative = str.startsWith("-");
        // 如果是负数，则将负号剔除
        if (isNegative) {
            str = str.substring(1);
        }
        // 计算数字的长度
        int length = str.length();
        // 如果是负数，则减去负号的长度
        if (isNegative) {
            length--;
        }
        return length;
    }

    private static final Map<Integer, String> numberMap = new HashMap<>();
    static {
        numberMap.put(0, "零");
        numberMap.put(1, "一");
        numberMap.put(2, "二");
        numberMap.put(3, "三");
        numberMap.put(4, "四");
        numberMap.put(5, "五");
        numberMap.put(6, "六");
        numberMap.put(7, "七");
        numberMap.put(8, "八");
        numberMap.put(9, "九");
    }

    public static String convertToChineseNumber(String input) {
        Pattern pattern = Pattern.compile("第(\\d+)条");
        Matcher matcher = pattern.matcher(input);
        StringBuffer result = new StringBuffer();
        while (matcher.find()) {
            String match = matcher.group();
            if (match.trim().length() - 2 < 4 ) {
                int number = Integer.parseInt(match.substring(1,match.length() - 1 ));
                StringBuilder chineseNumber = new StringBuilder();

                if (number >= 10 && number <= 99) {
                    if (number == 10) {
                        chineseNumber.append("十");
                    } else {
                        chineseNumber.append(numberMap.get(number / 10)).append("十");
                        if (number % 10 != 0) {
                            chineseNumber.append(numberMap.get(number % 10));
                        }
                    }
                } else if (number > 99) {
                    int hundreds = number / 100;
                    chineseNumber.append(numberMap.get(hundreds)).append("百");

                    int tens = number % 100 / 10;
                    if (tens != 0) {
                        chineseNumber.append(numberMap.get(tens)).append("十");
                    }
                    int ones = number % 10;
                    if (ones != 0) {
                        chineseNumber.append(numberMap.get(ones));
                    }
                } else {
                    chineseNumber.append(numberMap.get(number));
                }

                matcher.appendReplacement(result, "第" + chineseNumber + "条    ");
            }
        }
        matcher.appendTail(result);
        return result.toString();
    }

    public static String addition(String input){
        Pattern pattern = Pattern.compile("第[零一二三四五六七八九十百]+条");
        Matcher matcher = pattern.matcher(input);
        StringBuffer result = new StringBuffer();
        while (matcher.find()) {
            String match = matcher.group();
            matcher.appendReplacement(result, match +  "&nbsp;&nbsp;&nbsp;&nbsp;" );
        }
        matcher.appendTail(result);
        log.info("进入更改空格：{}",result.toString());
        return result.toString();
    }

//    public static void main(String[] args) {
////        String input = "这是第777条和第323条，还有124条";
////        String output = convertToChineseNumber(input);
////        System.out.println(output);
//
//        String input = "各部门：\n" +
//                "\n" +
//                "现将《中山市烟草专卖局（公司）员工食堂管理办法》印发给你们，请认真遵照执行。\n" +
//                "\n" +
//                "广东省中山市烟草专卖局\n" +
//                "\n" +
//                "2022年10月14日\n" +
//                "\n" +
//                "中山市烟草专卖局（公司）\n" +
//                "\n" +
//                "员工食堂管理办法\n" +
//                "\n" +
//                "第一条为加强局（公司）员工食堂管理，规范食堂运作，提高供餐质量，保障就餐人员身心健康，提升员工食堂管理规范化、制度化水平，特制定本办法。\n" +
//                "\n" +
//                "第二条本办法所指员工食堂，包括局（公司）各办公点设立的食堂（以下简称各食堂）。\n" +
//                "\n" +
//                "第三条各食堂主要负责员工的早餐、午餐、晚餐及接待等工作。主要任务是为就餐人员提供安全、卫生、科学、营养、便捷的就餐服务，合理保障员工福利，维护企业和谐稳定。\n" +
//                "\n" +
//                "第四条各食堂由办公室归口管理，负责食堂工作的组织、协调、管理、监督。\n" +
//                "\n" +
//                "第五条各食堂日常工作分工如下：西区食堂由办公室负责，南区物流配送中心园区食堂由第一管理中心负责，其他管理中心食堂分别由对应管理中心负责。分别负责食堂管理制度执行、原辅材料采购、菜品管理、厨房工作人员管理、台账管理、设备维护等日常工作。\n" +
//                "\n" +
//                "以上部门负责人对食堂日常工作负总责，同时需指定两名员工负责食堂日常工作，其中一名为食堂管理员，主要负责物资、菜品、人员等食堂具体工作，另一名为资料员，主要负责台账资料工作。\n" +
//                "\n" +
//                "第六条成立食堂督查小组，由办公室主任任组长，办公室、财务、审计、安全部门各一名业务骨干为成员，负责食堂运作情况的监督，包括食堂生产安全、预算开支、台账资料等方面。督查小组每月对食堂运作情况开展一次督查。\n" +
//                "\n" +
//                "第七条食堂厨师等工作人员需持合格《健康证》上岗，负责厨房生产运行、膳食制作、食谱制定等，确保运作流程规范、安全，符合国家相关法律法规的要求。\n" +
//                "\n" +
//                "第八条为保障员工健康和生命安全，患传染性疾病的员工不得在食堂就餐。经治愈后五年内，每季度出示一次体检健康证明交办公室存档，方可就餐。\n" +
//                "\n" +
//                "第九条食堂食材费用实行预算制管理。综合考虑福利费总体预算、员工人数等情况，早餐、";
//        String output = addition(input);
//        System.out.println(output);
//    }

}
